Retrieve Project List from another DOORS Database

Is there a way to retrieve a list of Projects from another DOORS database via DXL (other than the database where DXL will be run)?  I am new to DXL and would like to provide users a way to select requirements from another DOORS database, but do not know how to do this in DXL.  If I could get a list of Projects in a List View from a specific database, that would help.  Does anyone know how this can be done?


mchoban - Fri May 24 14:46:47 EDT 2013

Re: Retrieve Project List from another DOORS Database
llandale - Sat May 25 15:51:10 EDT 2013

You would need to open that other project in a 2nd DOORS client, then user OLE commands for your DXL to send retrieve DXL requests to the other database client.

I wonder if perhaps it would be better for that other database to create a readonly Partition that you would restore in your database.  Then your DXL just query that Project.  Another alternative would be to "dump" relative info from that other database into a file, and have your DXL read the file to figure out what to offer to the user.

-Louie

Re: Retrieve Project List from another DOORS Database
mchoban - Tue May 28 13:50:26 EDT 2013

llandale - Sat May 25 15:51:10 EDT 2013

You would need to open that other project in a 2nd DOORS client, then user OLE commands for your DXL to send retrieve DXL requests to the other database client.

I wonder if perhaps it would be better for that other database to create a readonly Partition that you would restore in your database.  Then your DXL just query that Project.  Another alternative would be to "dump" relative info from that other database into a file, and have your DXL read the file to figure out what to offer to the user.

-Louie

I played around with the partition idea, but how would I go about updating the database that contains the readonly copy with the latest and greatest changes made on the original file since the exported partition never shows up on the Exported Partitions tab since it is readonly?  I thought I would synch, but since copy is readonly it doesn't appear as needing to be synched.  (see https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014234745)

Re: Retrieve Project List from another DOORS Database
Richard_Good - Tue May 28 14:52:00 EDT 2013

mchoban - Tue May 28 13:50:26 EDT 2013

I played around with the partition idea, but how would I go about updating the database that contains the readonly copy with the latest and greatest changes made on the original file since the exported partition never shows up on the Exported Partitions tab since it is readonly?  I thought I would synch, but since copy is readonly it doesn't appear as needing to be synched.  (see https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014234745)

Communicating between DOORS databases is uber painful - you can only ever use automation to control the first DOORS instance you fired up. The only reliable way (if you do not have infinite time) is to use a system call to fire a new instance in batch mode which writes a file of results to a temp area or similar which you pick up after the call has finished - the following snippet may help get you started: - 

string res
string currAddins = getenv("DOORSADDINS")

win32SystemWait_("\"C:\\Program Files\\IBM\\Rational\\DOORS\\9.2\\bin\\doors.exe\" -a \"" currAddins "\" -W -d " awayDatabase " -b \"" dxlFileGetAttributes "\" -u \"" doorsname "\" -l \"" awayLogFile "\"", res, syswaitINFINITE_)

Re: Retrieve Project List from another DOORS Database
llandale - Tue May 28 16:57:00 EDT 2013

mchoban - Tue May 28 13:50:26 EDT 2013

I played around with the partition idea, but how would I go about updating the database that contains the readonly copy with the latest and greatest changes made on the original file since the exported partition never shows up on the Exported Partitions tab since it is readonly?  I thought I would synch, but since copy is readonly it doesn't appear as needing to be synched.  (see https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014234745)

For Write partitions, the home data is locked until the partition is "returned" or you cancel it.

For Read partitions the home data isn't locked and there is no "return".  Just create the partiion again and send it to the away database.  If I'm wrong about that, then after creating the partion immediately "return" it; thus unlocking all the home data.

-Louie

Re: Retrieve Project List from another DOORS Database
mchoban - Tue Jun 18 14:26:47 EDT 2013

llandale - Tue May 28 16:57:00 EDT 2013

For Write partitions, the home data is locked until the partition is "returned" or you cancel it.

For Read partitions the home data isn't locked and there is no "return".  Just create the partiion again and send it to the away database.  If I'm wrong about that, then after creating the partion immediately "return" it; thus unlocking all the home data.

-Louie

So, I have the partition created, added modules, set permission for away DB, but having problems with partition file.  Getting null argument for partitionfile when trying to refer to partition file properties and when attempting to close partition file.  Any help would be appreciated. 

string sProject = "/Some Project"
string sPartitionName = "Some PD Name"
string sPartitionDesc = "Some Description"
string sPartitionFile = "some_filename.par"
Project p = project sProject
Item itm

// Create Partition Definition
PartitionDefinition pdCommonPartition = create(p, sPartitionName, sPartitionDesc)

// Save Partition Definition
save(pdCommonPartition)

PartitionDefinition pd

//Loop thru Partition Definitions
for pd in p do
{
 
  string sPartDefName = pd.name
   
  // Check to see if PartitionDefinition is for partition of interest
  if (sPartDefName == sPartitionName)
  {
    load(p, pd.name)

    // Cycle thru Modules in Project and add to Partition
    for itm in p do
    {
      if (type(itm) == "Formal")
      {
        // Get Module name (including path) and add to Partition Definition 
          string sModToAdd = fullName(itm)  
          addModule(pd, sModToAdd)       
        // Set permissions to added Module
          PartitionModule pm = findModule(pd, sModToAdd)
          setAccess(pm, read|modify)
          save(pd)
      } // type(itm == Formal
    } // itm in p
   
    // Create/Open Partition File
    PartitionFile pfPartitionFile = open(sPartitionFile)

    // Apply Partition Definition to Partition file
    apply(p, sPartDefName, sPartitionName, sPartitionDesc, sPartitionFile, true)

    // Close Partition File
    close(pfPartitionFile)

  } // sPartDefName == sPartitionName
} // pd in p

Re: Retrieve Project List from another DOORS Database
llandale - Tue Jun 18 15:28:36 EDT 2013

mchoban - Tue Jun 18 14:26:47 EDT 2013

So, I have the partition created, added modules, set permission for away DB, but having problems with partition file.  Getting null argument for partitionfile when trying to refer to partition file properties and when attempting to close partition file.  Any help would be appreciated. 

string sProject = "/Some Project"
string sPartitionName = "Some PD Name"
string sPartitionDesc = "Some Description"
string sPartitionFile = "some_filename.par"
Project p = project sProject
Item itm

// Create Partition Definition
PartitionDefinition pdCommonPartition = create(p, sPartitionName, sPartitionDesc)

// Save Partition Definition
save(pdCommonPartition)

PartitionDefinition pd

//Loop thru Partition Definitions
for pd in p do
{
 
  string sPartDefName = pd.name
   
  // Check to see if PartitionDefinition is for partition of interest
  if (sPartDefName == sPartitionName)
  {
    load(p, pd.name)

    // Cycle thru Modules in Project and add to Partition
    for itm in p do
    {
      if (type(itm) == "Formal")
      {
        // Get Module name (including path) and add to Partition Definition 
          string sModToAdd = fullName(itm)  
          addModule(pd, sModToAdd)       
        // Set permissions to added Module
          PartitionModule pm = findModule(pd, sModToAdd)
          setAccess(pm, read|modify)
          save(pd)
      } // type(itm == Formal
    } // itm in p
   
    // Create/Open Partition File
    PartitionFile pfPartitionFile = open(sPartitionFile)

    // Apply Partition Definition to Partition file
    apply(p, sPartDefName, sPartitionName, sPartitionDesc, sPartitionFile, true)

    // Close Partition File
    close(pfPartitionFile)

  } // sPartDefName == sPartitionName
} // pd in p

Hopefully someone with partition experience can chime in here, but I'm pretty sure it would be cleaner if you separated the Partition Definition part from the partition creation part.  An analogy would be to use Mapquest to plan your trip (create Partition Definition), but later on take your trip using the map (create partition file).

I may be wrong but I don't think you need a "PartitionFile" handle unless you are "accepting" or "rejoining" a Partition; not while you are creating one.  And I suppose that if you open it, then try to create a partion; you will get some error.  And I suppose if you "open" the file that does not yet exist, you may get errors. 

Try the script without the "open" and "close" for the PartitionFile.

-Louie